package com.klw.business.mapper;

import com.klw.business.domain.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 预警结果Mapper接口
 *
 * @author klw
 * @date 2025-08-24
 */
public interface KlwWarningResultsMapper {
    /**
     * 查询预警结果
     *
     * @param warningId 预警结果主键
     * @return 预警结果
     */
    public KlwWarningResults selectKlwWarningResultsByWarningId(Long warningId);

    /**
     * 查询预警结果列表
     *
     * @param klwWarningResults 预警结果
     * @return 预警结果集合
     */
    public List<KlwWarningResults> selectKlwWarningResultsList(KlwWarningResults klwWarningResults);

    /**
     * 新增预警结果
     *
     * @param klwWarningResults 预警结果
     * @return 结果
     */
    public int insertKlwWarningResults(KlwWarningResults klwWarningResults);

    /**
     * 修改预警结果
     *
     * @param klwWarningResults 预警结果
     * @return 结果
     */
    public int updateKlwWarningResults(KlwWarningResults klwWarningResults);

    /**
     * 删除预警结果
     *
     * @param warningId 预警结果主键
     * @return 结果
     */
    public int deleteKlwWarningResultsByWarningId(Long warningId);

    /**
     * 批量删除预警结果
     *
     * @param warningIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteKlwWarningResultsByWarningIds(Long[] warningIds);

    /**
     * 根据学生ID和学期ID查询预警结果
     *
     * @param studentId  学生ID
     * @param semesterId 学期ID
     * @return
     */
    public KlwWarningResults selectByStudentAndSemester(@Param("studentId") Long studentId, @Param("semesterId") Long semesterId);

    /**
     * 批量新增预警结果
     *
     * @param list 预警结果
     * @return 结果
     */
    public int insertKlwWarningResultsBatch(List<KlmBatchModel> list);

    /**
     * 获取高预警学生人数
     *
     * @return 高预警学生人数
     */
    public Long getHighRiskCount();

    /**
     * 获取预警总数
     *
     * @return 预警总数
     */
    public Long getTotalRiskCount();

    /**
     * 获取模型置信度
     *
     * @return
     */
    public BigDecimal getModelAvailablePercent();

    /**
     * 根据参数获取模型置信度
     *
     * @return
     * @Param param 条件参数
     */
    public BigDecimal getModelAvailablePercentBySemetserId(@Param("queryParam") QueryDataParam param);

    /**
     * 获取折线图数据
     *
     * @param semesterId 查询参数
     * @param warningLevel 预警等级
     * @return
     */
    public TrendRespItem getRiskNumAndModelAvailablePercent(@Param("semesterId") Long semesterId, @Param("warningLevel") Integer warningLevel);

    /**
     * 获取饼图
     *
     * @param param 查询参数
     * @return
     */
    public PieData getPieData(@Param("queryParam") QueryDataParam param);

    /**
     * 获取柱状图
     *
     * @param param 查询参数
     * @return
     */
    public BarData getBarData(@Param("queryParam") QueryDataParam param);
}
